The present invention relates generally to the field of storage virtualization, and more particularly to multipath routing in virtualized storage systems.
The Wikipedia entry for “Multipath I/O” (http://en.wikipedia.org/wiki/Multipath_I/O, as of Mar. 26, 2015) states as follows: “[M]ultipath I/O [MPIO] is a fault-tolerance and performance-enhancement technique that defines more than one physical path between the CPU in a computer system and its mass-storage devices . . . . Multipath software layers can leverage the redundant paths to provide performance-enhancing features, including dynamic load balancing, traffic shaping, automatic path management, and dynamic reconfiguration.” MPIO can be used, for example, with direct-attached storage (DAS), network-attached storage (NAS), and storage area network (SAN) storage architectures.
Multipath routing algorithms choose the path on which to send an I/O request from among the multiple paths between a host and a storage subsystem. A path consists of a specific interface on the host and a specific interface on the storage subsystem, along with zero or more intermediate ‘hops’ which are introduced by, for example, SAN switches. Components along the path may be real or virtual. Current supported routing algorithms include round-robin (alternate sequentially among paths), queue-length (choose the path with the least number of uncompleted I/O requests), service-time (choose the path which has the shortest estimated service time), and others.
The Wikipedia entry for “RAID” (http://en.wikipedia.org/wiki/RAID, as of Mar. 26, 2015) states as follows: “RAID (originally redundant array of inexpensive disks; now commonly redundant array of independent disks) is a data storage virtualization technology that combines multiple disk drive components into a logical unit for the purposes of data redundancy or performance improvement.”
Known RAID configurations include the standard levels RAID 0 through RAID 6, nested levels, and many non-standard levels. Storage subsystems often support RAID. RAID is typically used in these contexts to increase the availability or performance of storage by distributing and duplicating data over a collection of storage devices, which may be, for example, disks or flash modules. RAID 5 is a particular form of RAID in which a logically contiguous fixed-size set of blocks (the “data blocks”) are distributed evenly over a set of devices and augmented by a parity block which is stored on a separate device. The logically contiguous set of blocks is known as a “stripe”. The contents of the parity block are calculated from the contents of the data blocks in such a way that the original data can be reconstructed in the event of the corruption of any single data block. Each of the data and parity blocks are stored on different devices, so that the original data can be reconstructed in case of a single device failure.